﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MakeIT.MiraPark.Negocios;

namespace MiraPark
{
    public partial class FormReimprimirReciboSaida : Form
    {
        CabineVO cabineVO = null;
        UsuarioVO usuarioVO = null;
        string placa = null;

        public FormReimprimirReciboSaida()
        {
            InitializeComponent();
        }
        public void setData(CabineVO cabineVO, string placa, UsuarioVO usuarioVO)
        {
            this.cabineVO = cabineVO;
            this.placa = placa;
            this.usuarioVO = usuarioVO;
        }


        private void FormReimprimirReciboSaida_Load(object sender, EventArgs e)
        {

            List<MovimentacaoVO> listMovimentacaoVOs = ModelBO.getMovimentacoes(null,this.cabineVO.idCabine,null,null,null,this.placa,null,false,true,null,true,false,false,false,true);
            if (listMovimentacaoVOs == null || listMovimentacaoVOs.Count == 0)
            {
                MessageBox.Show("Não encontrado movimentações nesta cabine para a placa " + this.placa, "Aviso");
                return;
            }
            MovimentacaoVO movimentacaoVO = listMovimentacaoVOs[listMovimentacaoVOs.Count-1];

            List<RecebimentoVO> listaRecebimentoVOs = ModelBO.getRecebimentos(null, movimentacaoVO.idMovimentacao, null, null, false, false, null, null, null, null);
            RecebimentoVO recebimentoVO = null;
            FormaPagamentoVO formaPagamentoVO = null;
            if (listaRecebimentoVOs != null && listaRecebimentoVOs.Count > 0)
            {
                recebimentoVO = listaRecebimentoVOs[0];
                formaPagamentoVO = recebimentoVO.formaPagamentoVO;
            }


            VeiculoVO veiculoVO = ModelBO.getVeiculo(this.placa);
            CorVO corVO = null;
            if (veiculoVO.idCor != null)
                corVO = ModelBO.getCor(veiculoVO.idCor);
            MarcaVO marcaVO = null;
            if (veiculoVO.idMarca != null)
                marcaVO = ModelBO.getMarca(veiculoVO.idMarca);
            ModeloVO modeloVO = null;
            if (veiculoVO.idModelo != null)
                modeloVO = ModelBO.getModelo(veiculoVO.idModelo);
            
            StringBuilder mensagem = new StringBuilder();
            mensagem.Append(Ticket.getHeader());
            mensagem.AppendLine("<ce>RECIBO " + movimentacaoVO.saida.ToString("dddd dd/MM/yyyy HH:mm:ss") + "</ce>");
            mensagem.AppendLine("------------------------------------------------");
            mensagem.AppendLine("<ce>Re-impressão - Segunda Via</ce>");
            mensagem.AppendLine("");
            mensagem.AppendLine("Seq.: " + movimentacaoVO.ticket.ToString().PadLeft(4, '0'));
            mensagem.AppendLine((marcaVO != null ? marcaVO.marca + " " : "") + (modeloVO != null ? modeloVO.modelo + " " : "") + (corVO != null ? corVO.nome : ""));
            mensagem.AppendLine("<b>Placa : " + movimentacaoVO.placa + "</b>");
            mensagem.AppendLine("Entrada : " + movimentacaoVO.entrada.ToShortDateString() + " Hora : " + movimentacaoVO.entrada.ToShortTimeString());
            TimeSpan estadia = movimentacaoVO.saida - movimentacaoVO.entrada;
            mensagem.AppendLine("Tempo estacionado : " + Math.Floor(estadia.TotalHours).ToString() + "h" + estadia.Minutes.ToString().PadLeft(2, '0') + "m");
            mensagem.AppendLine("");
            if (movimentacaoVO.especie.Equals(MovimentacaoVO.Especie.DiariaEspecial))
            {
                mensagem.AppendLine("------------------------------------------------");
                mensagem.AppendLine("* * * * * * * * * * P A G O * * * * * * * * * *");
                mensagem.AppendLine("------------------------------------------------");
            }
            else
            {
                foreach (MovimentoVO movimentoVO in movimentacaoVO.movimentoVOs)
                    mensagem.AppendLine(movimentoVO.especie + " Per.: " + movimentoVO.periodo + " " + movimentoVO.valor.ToString("#,#.00"));
            }
            mensagem.AppendLine("------------------------------------------------");
            mensagem.AppendLine("<ad>Total estadia : " + movimentacaoVO.valor.ToString("#,#.00") + "</ad>");
            mensagem.AppendLine("Pagos da seguinte forma");
            mensagem.AppendLine("<ad>" + (formaPagamentoVO!=null && formaPagamentoVO.idFormaPagamento != -1 ? formaPagamentoVO.formaPagamento : "Dinheiro") + " : " + movimentacaoVO.valor.ToString("#,#.00") + "</ad>");
            mensagem.Append(Ticket.getFooter(false,cabineVO, usuarioVO));

            this.textBoxResult.Text = mensagem.ToString();
        }

        private void buttonFecharJanela_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            while (true)
            {
                if (!Ticket.checkPrint() || !Ticket.printTicket(this.textBoxResult.Text))
                {
                    DialogResult dr = MessageBox.Show(this, "Tentar novamente?", "Confirmação", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dr.ToString().Equals("Yes"))
                    {
                        continue;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }

            }


        }

    }
}
